Power consumption of software applications is an essential performance characteristic in today's increasingly mobile computing market. Given the very limited advance in battery capacity in recent years, writing applications that are optimized for power is becoming ever more important.
For traditional desktop applications various performance analysis tools are used to identify performance bottlenecks and optimize code that causes performance degradation. These tools, however, lack an efficient and accurate mechanism for measuring and profiling power consumption of applications running on battery powered devices.
Performance analysis tools are an important component in a software development cycle, nevertheless. Such tools allow developers to identify performance bottlenecks in complex software applications and provide a valuable insight into what causes the bottleneck. Performance analysis may be used by developers in optimizing the code identified by the analysis tools as degrading performance.
To obtain data about application performance, the tools typically profile application code and quantify the usage of various system resources. Application code is loaded and executed in an environment that is able to monitor and record various performance characteristics during code execution. Monitoring a complex software application in its entirety is very expensive and impractical, however. Thus, for efficiency purposes, performance analysis tools periodically sample the code executing environment to obtain an ‘accurate’ measure of performance. This sampling is either time-based or event-based.
In a time-based analysis, the performance tool periodically takes a snapshot of the current state of the system after a predetermined time, or number of clock cycles. In an event-based analysis, a snapshot is taken every time a certain event occurs within the system, such as a cache miss or branch mis-predict. The sampled performance statistics are used to build a profile of the performance of the application running on the monitored system. For example, to identify code that causes an excessive number of data cache misses, a performance analysis tool can use event based sampling (the event being a data cache miss) to profile application code and determine which code modules are using memory inefficiently. These code modules may then be optimized.
Most performance analysis tools target applications written for desktop computers. However, with computing applications becoming increasingly mobile, mobile applications are becoming an important component of the software developing market. While traditional performance characteristics such as instruction count and memory performance are still relevant, with slow progress in increasing battery capacity, power efficiency of mobile applications has become an important performance characteristic too.
To analyze power requirements of mobile applications, performance analysis tools must include mechanisms that enable the profiling of application power consumption. However, simply incorporating power measurement into the existing performance analysis framework will not yield an accurate profile of an applications' power consumption. Neither time- nor event-based sampling is suited for generating profiles of system power usage that provide an accurate and detailed account of power consumption of different code modules.
Both time- and event-based sampling are driven by parameters unrelated to power consumption and thus cannot provide an accurate power profile. For example, time-based sampling will provide inaccurate measurement as different instructions consume different amounts of power, but may still have the same frequency of execution. Sampling applications periodically does not take into account this property of the system as it assumes that each instruction requires an equal amount of power to execute. Similarly, event-based sampling may be based on memory events or instructions executed, but none of the factors measured are indicative of power consumption. Two different code modules may execute the same instructions over the same time or may trigger a snapshot due to the same event (e.g., the same instruction causing a cache miss), but existing time-based and event-based sampling techniques would fail to recognize any differences in the amount of power consumed by the different modules.